CI: test with GCC 16 - #998
Conversation
165c848 to
263ed50
Compare
|
@arnavdham @veprbl it looks like we are hitting a warning inside an arrow header. Could you take a look and see whether this is something that is caused on our end, or whether this is something we would have to suppress for now to have working CI with gcc16? Relevant CI output:From this run [182/847] Building CXX object src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o
FAILED: [code=1] src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o
ccache /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/bin/g++ -DPODIO_ENABLE_ARROW=1 -DpodioArrow_EXPORTS -I/home/runner/work/podio/podio/include -Weffc++ -pedantic -Wextra -Wall -fdiagnostics-color=auto -Wdeprecated -Wno-long-long -Wshadow -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations -O2 -g -DNDEBUG -std=c++20 -fPIC -MD -MT src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o -MF src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o.d -o src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o -c /home/runner/work/podio/podio/src/ArrowFrameConverter.cc
In file included from /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_base.h:30,
from /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_adaptive.h:25,
from /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/builder.h:22,
from /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/api.h:26,
from /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:9:
In member function 'int64_t arrow::BufferBuilder::length() const',
inlined from 'int64_t arrow::TypedBufferBuilder<T, typename std::enable_if<(std::is_arithmetic<_Tp>::value || std::is_standard_layout<_Tp>::value)>::type>::length() const [with T = signed char]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:324:56,
inlined from 'virtual int64_t arrow::BasicUnionBuilder::length() const' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_union.h:67:65,
inlined from 'arrow::Status arrow::ArrayBuilder::Reserve(int64_t)' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_base.h:140:31,
inlined from 'arrow::Status arrow::NumericBuilder<TypeClass>::Append(value_type) [with T = arrow::DoubleType]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_primitive.h:104:5,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = double; BuilderType = arrow::NumericBuilder<arrow::DoubleType>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:41:44,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:53:72:
/cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:205:35: error: array subscript 4 is outside array bounds of 'std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, std::allocator<void>, __gnu_cxx::_S_atomic> [1]' [-Werror=array-bounds=]
205 | int64_t length() const { return size_; }
| ^~~~~
In file included from /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
from /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocator.h:46,
from /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/memory:67,
from /home/runner/work/podio/podio/include/podio/utilities/ArrowFrameConverter.h:4,
from /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:1:
In member function 'constexpr _Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, std::allocator<void>, __gnu_cxx::_S_atomic>]',
inlined from 'constexpr _Tp* std::allocator< <template-parameter-1-1> >::allocate(std::size_t) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocator.h:206:40,
inlined from 'static constexpr _Tp* std::allocator_traits<std::allocator<_Up> >::allocate(allocator_type&, size_type) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/alloc_traits.h:638:28,
inlined from 'std::__allocated_ptr<_Alloc> std::__allocate_guarded(_Alloc&) [with _Alloc = allocator<_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, allocator<void>, __gnu_cxx::_S_atomic> >]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocated_ptr.h:103:69,
inlined from 'std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::DoubleType>; _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1034:9,
inlined from 'std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::DoubleType>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1812:14,
inlined from 'std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::DoubleType>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:463:59,
inlined from 'std::shared_ptr<std::_NonArray<_Tp> > std::make_shared(_Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::DoubleType>; _Args = {arrow::MemoryPool*&}]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:1066:39,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = double; BuilderType = arrow::NumericBuilder<arrow::DoubleType>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:29:10,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:53:72:
/cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/new_allocator.h:162:75: note: at offset 272 into object of size 232 allocated by 'operator new'
162 | return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
| ^
In member function 'int64_t arrow::BufferBuilder::length() const',
inlined from 'int64_t arrow::TypedBufferBuilder<T, typename std::enable_if<(std::is_arithmetic<_Tp>::value || std::is_standard_layout<_Tp>::value)>::type>::length() const [with T = signed char]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:324:56,
inlined from 'virtual int64_t arrow::BasicUnionBuilder::length() const' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_union.h:67:65,
inlined from 'arrow::Status arrow::ArrayBuilder::Reserve(int64_t)' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_base.h:140:31,
inlined from 'arrow::Status arrow::NumericBuilder<TypeClass>::Append(value_type) [with T = arrow::FloatType]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_primitive.h:104:5,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = float; BuilderType = arrow::NumericBuilder<arrow::FloatType>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:41:44,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:52:69:
/cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:205:35: error: array subscript 4 is outside array bounds of 'std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, std::allocator<void>, __gnu_cxx::_S_atomic> [1]' [-Werror=array-bounds=]
205 | int64_t length() const { return size_; }
| ^~~~~
In member function 'constexpr _Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, std::allocator<void>, __gnu_cxx::_S_atomic>]',
inlined from 'constexpr _Tp* std::allocator< <template-parameter-1-1> >::allocate(std::size_t) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocator.h:206:40,
inlined from 'static constexpr _Tp* std::allocator_traits<std::allocator<_Up> >::allocate(allocator_type&, size_type) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/alloc_traits.h:638:28,
inlined from 'std::__allocated_ptr<_Alloc> std::__allocate_guarded(_Alloc&) [with _Alloc = allocator<_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, allocator<void>, __gnu_cxx::_S_atomic> >]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocated_ptr.h:103:69,
inlined from 'std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::FloatType>; _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1034:9,
inlined from 'std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::FloatType>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1812:14,
inlined from 'std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::FloatType>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:463:59,
inlined from 'std::shared_ptr<std::_NonArray<_Tp> > std::make_shared(_Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::FloatType>; _Args = {arrow::MemoryPool*&}]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:1066:39,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = float; BuilderType = arrow::NumericBuilder<arrow::FloatType>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:29:10,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:52:69:
/cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/new_allocator.h:162:75: note: at offset 272 into object of size 232 allocated by 'operator new'
162 | return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
| ^
In member function 'int64_t arrow::BufferBuilder::length() const',
inlined from 'int64_t arrow::TypedBufferBuilder<T, typename std::enable_if<(std::is_arithmetic<_Tp>::value || std::is_standard_layout<_Tp>::value)>::type>::length() const [with T = signed char]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:324:56,
inlined from 'virtual int64_t arrow::BasicUnionBuilder::length() const' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_union.h:67:65,
inlined from 'arrow::Status arrow::ArrayBuilder::Reserve(int64_t)' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_base.h:140:31,
inlined from 'arrow::Status arrow::NumericBuilder<TypeClass>::Append(value_type) [with T = arrow::Int32Type]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_primitive.h:104:5,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = int; BuilderType = arrow::NumericBuilder<arrow::Int32Type>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:41:44,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:51:65:
/cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:205:35: error: array subscript 4 is outside array bounds of 'std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, std::allocator<void>, __gnu_cxx::_S_atomic> [1]' [-Werror=array-bounds=]
205 | int64_t length() const { return size_; }
| ^~~~~
In member function 'constexpr _Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, std::allocator<void>, __gnu_cxx::_S_atomic>]',
inlined from 'constexpr _Tp* std::allocator< <template-parameter-1-1> >::allocate(std::size_t) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocator.h:206:40,
inlined from 'static constexpr _Tp* std::allocator_traits<std::allocator<_Up> >::allocate(allocator_type&, size_type) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/alloc_traits.h:638:28,
inlined from 'std::__allocated_ptr<_Alloc> std::__allocate_guarded(_Alloc&) [with _Alloc = allocator<_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, allocator<void>, __gnu_cxx::_S_atomic> >]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocated_ptr.h:103:69,
inlined from 'std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::Int32Type>; _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1034:9,
inlined from 'std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::Int32Type>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1812:14,
inlined from 'std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::Int32Type>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:463:59,
inlined from 'std::shared_ptr<std::_NonArray<_Tp> > std::make_shared(_Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::Int32Type>; _Args = {arrow::MemoryPool*&}]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:1066:39,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = int; BuilderType = arrow::NumericBuilder<arrow::Int32Type>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:29:10,
inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:51:65:
/cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/new_allocator.h:162:75: note: at offset 272 into object of size 232 allocated by 'operator new'
162 | return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
| ^
cc1plus: all warnings being treated as errors |
I think this has to be suppressed. No clear reason according to me why this should be giving a warning |
263ed50 to
7b384b9
Compare
|
Looks like having |
7b384b9 to
bda1448
Compare
|
Unless there are objections, I will merge this later today. |
|
I'll update arrow in the LCG stacks to 25 for tomorrow; I don't get the warnings locally with that and GCC 16 so it may do something (maybe not). |
|
OK. I will wait then until those appear tomorrow. |
|
Didn't get in for today since there were a few changes of the recipe... https://gitlab.cern.ch/sft/stacks/lcgcmake/-/merge_requests/4307. It should be there tomorrow |
GCC16 starts to speculatively devirtualize (wrongly!) if all of the api header is available which results in warnings that are not suppressable with compiler flags otherwise.
bda1448 to
d11111c
Compare
This reverts commit d11111c.
|
It's possible that now reverting d73d1dd works; probably it's better than adding all the headers if that's the intended way? |
|
I don't know enough about arrow to judge what's the intended way, but if gcc keeps wrongly speculatively devirtualizing we at least know the solution. Let's see what the build says. |
|
Doesn't seem to like it: https://github.com/AIDASoft/podio/actions/runs/32949414659/job/98117300290?pr=998#step:5:799 |
This reverts commit d73d1dd.
BEGINRELEASENOTES
ENDRELEASENOTES